/**
 * 样式修复工具 - 修复React运行时的样式属性警告
 * 
 * 此模块提供一个简单且安全的方法来拦截和忽略特定的React样式警告
 * 特别是关于 -webkitMask 属性的警告
 */

/**
 * 安全地拦截控制台警告的函数
 * 这个方法避免修改React内部实现或DOM原型，只拦截特定的警告消息
 */
export const safeInterceptConsoleWarnings = () => {
  // 仅在浏览器环境中执行
  if (typeof window !== 'undefined' && typeof console !== 'undefined') {
    // 保存原始的console.warn方法
    const originalWarn = console.warn;
    
    // 创建一个安全的代理函数，确保正确的调用上下文
    Object.defineProperty(console, 'warn', {
      configurable: true,
      enumerable: true,
      writable: true,
      value: function(...args: any[]) {
        // 将参数转换为字符串，检查是否包含我们要忽略的警告
        const message = String(args[0]);
        
        // 检查是否是 -webkitMask 相关的样式警告
        if (message.includes('Unsupported style property') && 
            message.includes('-webkitMask') && 
            message.includes('Did you mean WebkitMask')) {
          // 忽略这个特定的警告
          return;
        }
        
        // 对于其他所有警告，使用原始的console.warn
        return originalWarn.apply(console, args);
      }
    });
    
    // 同样为console.error添加拦截
    const originalError = console.error;
    Object.defineProperty(console, 'error', {
      configurable: true,
      enumerable: true,
      writable: true,
      value: function(...args: any[]) {
        const message = String(args[0]);
        if (message.includes('Unsupported style property') && 
            message.includes('-webkitMask') && 
            message.includes('Did you mean WebkitMask')) {
          return;
        }
        return originalError.apply(console, args);
      }
    });
  }
};

/**
 * 在DOMContentLoaded事件后执行的修复函数
 * 这样可以确保在React开始渲染之前应用修复
 */
export const applyStyleFixes = () => {
  // 检查是否是浏览器环境
  if (typeof window !== 'undefined' && typeof document !== 'undefined') {
    // 检查文档是否已经加载完成
    if (document.readyState === 'loading') {
      // 如果文档还在加载中，添加DOMContentLoaded事件监听器
      document.addEventListener('DOMContentLoaded', () => {
        safeInterceptConsoleWarnings();
      }, { once: true });
    } else {
      // 如果文档已经加载完成，立即应用修复
      safeInterceptConsoleWarnings();
    }
  }
};

// 导出一个简单的函数，供外部调用
// 这个函数不会立即执行，而是需要在应用初始化时显式调用
export default applyStyleFixes;